from flask import Blueprint,current_app
# 解决跨站构造攻击防护时生成csrf_token值步骤
# 1.导入csrf模块
from flask_wtf import csrf
html = Blueprint("web_html",__name__)

# http://127.0.0.1:5000/index.html
# http://127.0.0.1:5000/index.html
# http://127.0.0.1:5000/
# 发现系统内置的转换器都不能满足我们的要求，所以需要自定义转换器来完成
# 在正则表达式中，默认.表示除了换行符之前的任意单个字符
# *：表示匹配前面的字符0次或者任意多次
# +:表示匹配前面的字符一次或者任意多次
# ?:表示匹配前面的字符0次或者1次
# .*:匹配前面任意单个字符0次或者任意多次

# http://127.0.0.1:5000/
# http://127.0.0.1:5000/login.html
@html.route("/<re(r'.*'):html_file_name>") # 系统内置的转换器有：default(str),int,float,any,path,uuid
def get_html(html_file_name):
    # 如果用户输入的网址为http://127.0.0.1:5000/，则自动转化成http://127.0.0.1:5000/index.html
    if not html_file_name:
        html_file_name="index.html"
    # 如果网址不是这个地址：http://127.0.0.1:5000/favicon.ico
    if html_file_name!="favicon.ico":
        # http://127.0.0.1:5000/html/login.html
        html_file_name="html/"+html_file_name

    # 根据静态资源的文件名获取里面的内容转化成响应流对象
    response = current_app.send_static_file(html_file_name)
    csrf_token = csrf.generate_csrf() # 2.生成csrf_token的值
    print("csrf_token=",csrf_token)
    # 3. 将csrf_token的值设置到响应对象的cookie中
    response.set_cookie("csrf_token",csrf_token)
    print("response=",response,",type=",type(response))
    return response


